{"record":{"id":"e2a50aac467af989","repo":"balderdashy/sails","slug":"a-leading-is-not-required-in-the-config-views","errorCode":null,"errorMessage":"A leading `.` is not required in the config.views.extension option.  Removing it for you...","messagePattern":"A leading `\\.` is not required in the config\\.views\\.extension option\\.  Removing it for you\\.\\.\\.","errorType":"console","errorClass":null,"httpStatus":null,"severity":"warning","filePath":"lib/hooks/views/configure.js","lineNumber":36,"sourceCode":"  if (sails.config.views.engine) {\n    sails.log.debug('The `config.views.engine` config has been deprecated.');\n    sails.log.debug('In Sails 1.x, use `config.views.extension` to choose your view');\n    sails.log.debug('extension (defaults to \".ejs\"), and use `config.views.getRenderFn`');\n    sails.log.debug('to configure your template engine or leave it undefined to use');\n    sails.log.debug('the built-in EJS template support.\\n');\n    sails.config.views.extension = sails.config.views.engine.ext || 'ejs';\n    delete sails.config.views.engine;\n  }\n\n\n  // Make sure the extension is valid.\n  if (sails.config.views.extension === '' || (!_.isString(sails.config.views.extension) && sails.config.views.extension !== false)) {\n    throw flaverr({ name: 'userError', code: 'E_INVALID_VIEW_CONFIG' }, new Error('`sails.config.views.extension` must either be a string or `false`.'));\n  }\n\n  // Let user know that a leading . is not required in the viewEngine option and then fix it\n  if (sails.config.views.extension[0] === '.') {\n    sails.log.warn('A leading `.` is not required in the config.views.extension option.  Removing it for you...');\n    sails.config.views.extension = sails.config.views.extension.substr(1);\n  }\n\n  // Make sure the `getRenderFn` is valid, if provided.\n  if (!_.isUndefined(sails.config.views.getRenderFn) && !_.isFunction(sails.config.views.getRenderFn)) {\n    throw flaverr({ name: 'userError', code: 'E_INVALID_VIEW_CONFIG' }, new Error('`sails.config.views.getRenderFn`, if provided, must be a function (got ' + util.inspect(sails.config.views.getRenderFn) + ')'));\n  }\n\n  else if (sails.config.views.getRenderFn) {\n    var renderFn = sails.config.views.getRenderFn();\n    if (!_.isFunction(renderFn)) {\n      throw flaverr({ name: 'userError', code: 'E_INVALID_VIEW_CONFIG' }, new Error('`sails.config.views.getRenderFn` returned an invalid value. (expected a function, but got: ' + util.inspect(renderFn) + ')'));\n    }\n    sails.hooks.views._renderFn = renderFn;\n\n    if (sails.config.views.layout) {\n      sails.log.error('Ignoring `sails.config.views.layout`...');\n      sails.log.error('Sails\\' built-in layout support only works with the default EJS view engine.');","sourceCodeStart":18,"sourceCodeEnd":54,"githubUrl":"https://github.com/balderdashy/sails/blob/7b76422cc27823df033572bdda5c4910a68b697f/lib/hooks/views/configure.js#L18-L54","documentation":"Sails expects `sails.config.views.extension` to be a bare extension string like 'ejs' (or `false`). If it starts with a dot, Sails logs this warning and silently strips the leading dot so template lookups still resolve. It is auto-corrected, not fatal.","triggerScenarios":"Configuring `sails.config.views.extension = '.ejs'` (with leading dot) in config/views.js and lifting the app.","commonSituations":"Developers migrating from Express-style `view engine: 'ext.ejs'` conventions or guessing the format, accidentally including the dot.","solutions":["Remove the leading dot from the extension in config/views.js","Leave the value as `false` if views have no extension"],"exampleFix":"// before\nextension: '.ejs'\n// after\nextension: 'ejs'","handlingStrategy":"validation","validationCode":"const ext = sails.config.views.extension;\nif (typeof ext === 'string' && ext[0] === '.') {\n  sails.config.views.extension = ext.slice(1);\n}","typeGuard":"function isValidViewExtension(ext) {\n  return ext === false || (typeof ext === 'string' && !ext.startsWith('.'));\n}","tryCatchPattern":null,"preventionTips":["Never prefix config.views.extension with a dot","Use `false` for extensionless views","Copy the stock config/views.js as the template"],"tags":["views","config","sails"],"backgroundTag":"invalid-view-extension-config","analyzedSha":"7b76422cc27823df033572bdda5c4910a68b697f","analyzedAt":"2026-09-01T04:01:57.104Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-08T10:18:20.063Z"}