在我的应用程序中,当我尝试调用该服务时,我收到的错误如下:
module.js:327
throw err;
^
Error: Cannot find module '/api/sessions'
at Function.Module._resolveFilename (module.js:325:15)
at Function.Module._load (module.js:276:25)
at Module.require (module.js:353:17)
at require (internal/module.js:12:17)
at Object.<anonymous> (C:\Tutorials\try\ModernWebApp\server.js:13:9)
at Module._compile (module.js:409:26)
at Object.Module._extensions..js (module.js:416:10)
at Module.load (module.js:343:32)
at Function.Module._load (module.js:300:12)
at Function.Module.runMain (module.js:441:10)
at startup (node.js:139:18)
at node.js:968:3
[14:38:53] [nodemon] app crashed - waiting for file changes before starting...
这是我的server.js
文件:
var express = require('express');
var bodyParser = require('body-parser');
var app = express();
app.use(express.static( __dirname + '/assets'))
app.use(express.static( __dirname + '/templates'))
app.use(bodyParser.json());
//if i remove both this 2 lines, no issues come.
app.use(require('/api/sessions', require( __dirname + '/controllers/api/sessions')));
app.use(require('/api/users', require('./controllers/api/users')));
app.get('/', function( req, res ){
res.sendFile( __dirname + '/layouts/app.html');
})
app.listen( 8888, function(){
console.log('app listening!' + 8888 );
})
这里有什么问题,如何解决这个问题。这两个文件只不过是从前端处理查询。
session.js
示例:
var router = require('express').Router();
var bcrypt = require('bcryptjs');
var jwt = require('jwt-simple');
var User = require('../../models/user');
var config = require('../../config');
router.post('/sessions', function( req, res, next ) {
User.findOne({
username: req.body.username,
}).select('password').select('username')
.exec(function( err, user ) {
if( err ) { return next( err )}
if(!user) { return res.send(401)}
bcrypt.compare(req.body.password, user.password, function( err, valid ) {
if( err ) { return next( err )}
if(!valid) { return res.send(401)}
var token = jwt.encode({username:user.username}, config.secret);
res.send( token );
})
})
});
module.exports = router;
答案 0 :(得分:1)
尝试使用。
app.use(require('/api/sessions'));
app.use(require('/api/users'));
如果这不起作用,请给出您想要的模块的正确路径。因为require函数只接受一个参数,即模块ID在字符串中。
https://nodejs.org/api/modules.html#modules_module_require_id
答案 1 :(得分:1)
您只需使用require('/api/sessions')
,因此节点会在您的sessions.js
中查找root dir(/)
文件,而不是您的工作目录。
也许你应该试试require('./api/sessions')